home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-02-27 | 4.5 KB | 215 lines | [TEXT/MSET] |
- \ Matrix timing test. Nov 91.
-
- need floating point
-
- \ Usage: 50 100 dimension Fmatrix MM
-
- 0 value ROWDIM
- 0 value COLDIM
-
- : DIMENSION
- -> colDim -> rowDim
- colDim rowDim * ;
-
-
- :class FMATRIX super{ Farray }
-
- var #rows
- var #cols
- var rowLength
- var colLength
-
- :m #ROWS: get: #rows ;m
- :m #COLS: get: #cols ;m
-
- :m ^ELEM: { row col \ temp -- addr }
- row get: #cols * col + ^elem: super ;m
-
- :m AT: ^elem: self f@ ;m
-
- :m TO: ^elem: self f! ;m
-
- :m ROW: { row -- limit start stride } \ Sets up for a DO over the row.
- row get: rowLength * idxBase + \ addr
- get: rowLength bounds \ ( limit addr )
- 12 ;m \ stride
-
- :m COL: { col -- limit start stride } \ Sets up for a DO over the column.
- col 12 * idxBase + \ addr
- get: colLength bounds \ ( limit addr )
- get: rowLength ;m \ stride
-
- :m PUTROW: \ ( 1st ... last row -- )
- row: self drop ( we know stride is 12 )
- swap 12 -
- do i f! -12 +loop ;m
-
- :m PRINTROW: { row -- }
- row row: self drop
- ?do i f@ 10 e.r 12 +loop ;m
-
- :m PRINTCOL: { col \ stride -- }
- col col: self -> stride
- ?do i f@ 10 e.r cr stride +loop ;m
-
- :m PRINT:
- get: #rows 0
- ?do i printRow: self cr loop ;m
-
- :m CLASSINIT:
- rowDim put: #rows colDim put: #cols
- get: #cols 12 * put: rowLength
- get: #rows get: rowLength * put: colLength
- classinit: super ;m
-
- ;class
-
-
- 5 3 dimension Fmatrix FF
-
- objPtr A class_is Fmatrix
- objPtr B class_is Fmatrix
- objPtr C class_is Fmatrix
-
- : DIMSCHK { l m n -- }
- #rows: B m <>
- l #rows: C <>
- n #cols: C <>
- or or abort" Wrong operand dimensions for matrix multiply" ;
-
-
- : MXMPY { m1 m2 m3 \ l m n Aaddr Alimit Baddr stride %sum -- }
- m1 -> A m2 -> B m3 -> C
- #rows: A -> l #cols: A -> m #cols: B -> n
- l m n dimsChk
- l 0 DO
- i row: A drop -> Aaddr -> Alimit
- n 0 DO
- 0.0 -> %sum
- i col: B -> stride -> Baddr drop
- Alimit Aaddr
- DO i f@ Baddr f@ f* ++> %sum
- stride ++> Baddr
- 12 +LOOP
- %sum j i to: C
- LOOP
- LOOP ;
-
-
- : DUMMY { m1 m2 m3 \ l m n Aaddr Alimit Baddr stride %sum -- }
- m1 -> A m2 -> B m3 -> C
- #rows: A -> l #cols: A -> m #cols: B -> n
- l m n dimsChk
- l 0 DO
- i row: A drop -> Aaddr -> Alimit
- n 0 DO
- 0.0 -> %sum
- i col: B -> stride -> Baddr drop
- Alimit Aaddr
- DO
- \ i f@ Baddr f@ f2drop
- \ Note: omit this line entirely for UseFPU? True test,
- \ otherwise overhead figure is artificially high.
- stride ++> Baddr
- 12 +LOOP
- %sum j i to: C
- LOOP
- LOOP ;
-
-
- : SLOWMPY { m1 m2 m3 \ l m n %sum -- }
- m1 -> A m2 -> B m3 -> C
- #rows: A -> l #cols: A -> m #cols: B -> n
- l m n dimsChk
- l 0 DO
- n 0 do
- 0.0 -> %sum
- m 0 DO
- k i at: A i j at: B f* ++> %sum
- LOOP
- %sum j i to: C
- LOOP
- LOOP ;
-
-
- : SLOWDUMMY { m1 m2 m3 \ l m n %sum -- }
- m1 -> A m2 -> B m3 -> C
- #rows: A -> l #cols: A -> m #cols: B -> n
- l m n dimsChk
- l 0 DO
- n 0 DO
- 0.0 -> %sum
- m 0 DO
- k i at: A i j at: B f2drop
- LOOP
- %sum j i to: C
- LOOP
- LOOP ;
-
-
- 3 5 dimension fmatrix matA
- 5 3 dimension fmatrix matB
- 3 3 dimension fmatrix matC
-
- -2.0 -7.0 -4.0 8.0 1.0 0 putRow: matA
- -3.0 0.0 -1.0 0.0 -9.0 1 putRow: matA
- 0.0 -1.0 -8.0 -9.0 -3.0 2 putRow: matA
-
- -1.0 3.0 -2.0 0 putRow: matB
- 4.0 -1.0 1.0 1 putRow: matB
- 9.0 -4.0 -8.0 2 putRow: matB
- -5.0 0.0 -3.0 3 putRow: matB
- 6.0 3.0 -6.0 4 putRow: matB
-
- 0.0 fvalue TOTAL
- 0.0 fvalue OVERHEAD
- 0.0 fvalue CALCS
- 0.0 fvalue SLOWTOTAL
- 0.0 fvalue SLOWOVERHEAD
- 0.0 fvalue SLOWCALCS
-
-
- : MATINIT \ ( mat -- )
- -> A
- #rows: A 0
- do
- #cols: A 0
- do
- i j + >float j i to: A
- loop
- loop ;
-
- : TICKS global Ticks @ ;
-
-
- : .RESULTS \ ( flt -- )
- fdup 6 f.r 6 spaces
- 20.0 f* 16.0 f/ ." scaled: " 6 f.r cr ;
-
-
- : TIMER { mx1 mx2 mx3 -- }
- mx1 matinit mx2 matinit
- ticks
- 10 0 do mx1 mx2 mx3 mxmpy loop
- ticks swap - >float 600.0 f/ -> total
- ticks
- 10 0 do mx1 mx2 mx3 dummy loop
- ticks swap - >float 600.0 f/ -> overhead
- total overhead f- -> calcs
- ticks
- 10 0 do mx1 mx2 mx3 slowmpy loop
- ticks swap - >float 600.0 f/ -> slowtotal
- ticks
- 10 0 do mx1 mx2 mx3 slowDummy loop
- ticks swap - >float 600.0 f/ -> slowoverhead
- slowTotal slowOverhead f- -> slowCalcs
- ." Total " total .results
- ." Calcs " calcs .results
- ." Overhead" overhead .results
- ." Slow total" slowTotal .results
- ." Slow calcs" slowCalcs .results
- ." Slow overhead" slowOverhead .results ;
-
- 50 50 dimension fmatrix SOURCE
- 50 50 dimension fmatrix RESULT
-